package com.chinaway.mobile.authcode.util;

import java.awt.image.BufferedImage;

import org.apache.commons.lang.StringUtils;

/**
 * 针对图片操作的filter
 * 
 */
public class Filter {
	/**
	 * 黑白过滤器
	 * 
	 * @param image
	 * @return
	 */
	public static void blackAndWhiteFilter(BufferedImage image) {
		if (image == null) {
			return;
		}
		for (int i = 0; i < image.getHeight(); i++) {
			for (int j = 0; j < image.getWidth(); j++) {
				image.setRGB(j, i, Tools.pixelConvert(image.getRGB(j, i)));
			}
		}
	}
	
	public static void blackAndWhiteZjFilter(BufferedImage image) {
		StringBuffer sb;
		for (int i = 0; i < image.getHeight(); i++) {
			for (int j = 0; j < image.getWidth(); j++) {
				int pixel = image.getRGB(j, i);
				// 获取R/G/B
				int r = (pixel >> 16) & 0xff;
				int g = (pixel >> 8) & 0xff;
				int b = (pixel) & 0xff;
				boolean br = r < 135;
				boolean bg = g < 135;
				boolean bb = b < 135;
				sb = new StringBuffer();
				sb.append(br).append(",");
				sb.append(bg).append(",");
				sb.append(bb);
				if (StringUtils.countMatches(sb.toString(), "false") > 2) {
					image.setRGB(j, i, 0x00ffffff);
				} else {
					image.setRGB(j, i, 0xff000000);
				}
			}
		}
	}

	/**
	 * 验证码为黑色 将其他颜色过滤 ,只留黑色
	 */
	public static void filterBlack(BufferedImage image) {
		if (image == null) {
			return;
		}
		for (int i = 0; i < image.getHeight(); i++) {
			for (int j = 0; j < image.getWidth(); j++) {
				image.setRGB(j, i,Tools.pixelConvert(image.getRGB(j, i), 0x00ffffff));
			}
		}
	}

	/**
	 * 孤点过滤器 白色的正上,正下,正左,正右,任意2个方向以上为黑色,保留黑色,否则,为白色
	 * 
	 * @param image
	 * @return
	 */
	public static void dotFilter(BufferedImage image) {
		if (image == null) {
			return;
		}
		StringBuffer sb;
		// 0xffffffff白色,0xff000000 黑色
		for (int i = 0; i < image.getHeight(); i++) {// i 高度
			for (int j = 0; j < image.getWidth(); j++) {// j 宽度
				
				if (i == (image.getHeight() - 1)||i==0||i == (image.getHeight() - 1) || j == (image.getWidth() - 1)) {
						image.setRGB(j, i, 0xffffffff);
				}
				
				sb = new StringBuffer();
				if (i > 0 && j > 0 && i < (image.getHeight() - 1) && j < (image.getWidth() - 1)) {
					if (image.getRGB(j, i) == 0xff000000) {
						boolean b1 = image.getRGB(j - 1, i) == 0xffffffff;
						boolean b2 = image.getRGB(j - 1, i - 1) == 0xffffffff;
						boolean b3 = image.getRGB(j - 1, i + 1) == 0xffffffff;

						boolean b4 = image.getRGB(j, i - 1) == 0xffffffff;
						boolean b5 = image.getRGB(j, i + 1) == 0xffffffff;

						boolean b6 = image.getRGB(j + 1, i - 1) == 0xffffffff;
						boolean b7 = image.getRGB(j + 1, i) == 0xffffffff;
						boolean b8 = image.getRGB(j + 1, i + 1) == 0xffffffff;
						sb.append(b1).append(",");
						sb.append(b2).append(",");
						sb.append(b3).append(",");
						sb.append(b4).append(",");
						sb.append(b5).append(",");
						sb.append(b6).append(",");
						sb.append(b7).append(",");
						sb.append(b8).append(",");
						if (StringUtils.countMatches(sb.toString(), "false")==0) {
							image.setRGB(j, i, 0xffffffff);
						}
					}
				} 
//				else {
//					if (j == 0) {
//						if (i == 0) {
//							if (image.getRGB(j, i) == 0xff000000) {
//								boolean b5 = image.getRGB(j, i + 1) == 0xffffffff;
//								boolean b7 = image.getRGB(j + 1, i) == 0xffffffff;
//								boolean b8 = image.getRGB(j + 1, i + 1) == 0xffffffff;
//								sb.append(b5).append(",");
//								sb.append(b7).append(",");
//								sb.append(b8);
//								if (StringUtils.countMatches(sb.toString(),"false") < 2) {
//									image.setRGB(j, i, 0xffffffff);
//								}
//							}
//						} else {
//							if (image.getRGB(j, i) == 0xff000000) {
//								boolean b4 = image.getRGB(j, i - 1) == 0xffffffff;
//								boolean b5 = image.getRGB(j, i + 1) == 0xffffffff;
//
//								boolean b6 = image.getRGB(j + 1, i - 1) == 0xffffffff;
//								boolean b7 = image.getRGB(j + 1, i) == 0xffffffff;
//								boolean b8 = image.getRGB(j + 1, i + 1) == 0xffffffff;
//								sb.append(b4).append(",");
//								sb.append(b5).append(",");
//								sb.append(b6).append(",");
//								sb.append(b7).append(",");
//								sb.append(b8);
//								if (StringUtils.countMatches(sb.toString(), "false") < 2) {
//									image.setRGB(j, i, 0xffffffff);
//								}
//
//							}
//						}
//					}
//					if (j == (image.getWidth() - 1)) {
//						if (i == (image.getHeight() - 1)) {
//							if (image.getRGB(j, i) == 0xff000000) {
//
//								boolean b1 = image.getRGB(j - 1, i) == 0xffffffff;
//								boolean b2 = image.getRGB(j - 1, i - 1) == 0xffffffff;
//								boolean b4 = image.getRGB(j, i - 1) == 0xffffffff;
//
//								sb.append(b1).append(",");
//								sb.append(b2).append(",");
//								sb.append(b4);
//								if (StringUtils.countMatches(sb.toString(), "false") < 2) {
//									image.setRGB(j, i, 0xffffffff);
//								}
//							}
//						}else if(i==0){
//							boolean b1 = image.getRGB(j - 1, i) == 0xffffffff;
//							boolean b3 = image.getRGB(j - 1, i + 1) == 0xffffffff;
//							boolean b5 = image.getRGB(j, i + 1) == 0xffffffff;
//
//							sb.append(b1).append(",");
//							sb.append(b3).append(",");
//							sb.append(b5);
//							if (StringUtils.countMatches(sb.toString(), "false") < 2) {
//								image.setRGB(j, i, 0xffffffff);
//							}
//							
//						} else {
//
//							boolean b1 = image.getRGB(j - 1, i) == 0xffffffff;
//							boolean b2 = image.getRGB(j - 1, i - 1) == 0xffffffff;
//							boolean b3 = image.getRGB(j - 1, i + 1) == 0xffffffff;
//
//							boolean b4 = image.getRGB(j, i - 1) == 0xffffffff;
//							boolean b5 = image.getRGB(j, i + 1) == 0xffffffff;
//
//							sb.append(b1).append(",");
//							sb.append(b2).append(",");
//							sb.append(b3).append(",");
//							sb.append(b4).append(",");
//							sb.append(b5);
//							if (StringUtils.countMatches(sb.toString(), "false") < 2) {
//								image.setRGB(j, i, 0xffffffff);
//							}
//
//						}
//					}
//
//				}

			}
		}
	}
}
